<?php

namespace App\Model;

use App\Services\Iot\IotService1 as IotService;
use Carbon\Carbon;
use Hyperf\Database\Model\Relations\BelongsTo;
use Hyperf\Database\Model\Relations\BelongsToMany;
use Hyperf\Utils\Arr;

/**
 * App\Device
 *
 * @property int $id
 * @property string $sn 设备编号
 * @property string|null $iot_sn 主机才有的 iot sn
 * @property int $channel 路数
 * @property int|null $station_id 充电站id
 * @property int $orders_count 订单数
 * @property int $inline 在线
 * @property int|null $use_rate 使用率
 * @property array|null $other 其他数据
 * @property string|null $qr_code 二维码
 * @property-read int|null $distributors_count
 * @property array|null $port_status 端口状态
 * @property int $is_purchase 是否为买断
 * @property int $is_active 是否可用
 * @property-read int|null $daily_records_count
 * @property float|null $deposit 押金
 * @property-read int|null $coupons_count
 * @property string|null $card_no 卡号
 * @property int $signal 信号强度
 * @property string|null $coin_min 投币充电时间(单位为分钟)
 * @property string|null $card_min 刷卡充电时间(单位为分钟)
 * @property string|null $coin_elec 单次投币最大电量(单位为0.1度)
 * @property string|null $card_elec 单次刷卡最大电量(单位为0.1度)
 * @property string|null $cst 刷卡扣费金额(单位为角)
 * @property string|null $power_max_1 第1档最大充电功率(单位为瓦)
 * @property string|null $power_max_2 第2档最大充电功率(单位为瓦)
 * @property string|null $power_max_3 第3档最大充电功率(单位为瓦)
 * @property string|null $power_max_4 第4档最大充电功率(单位为瓦)
 * @property string|null $power_2_time 第2档充电时间百分比
 * @property string|null $power_3_time 第3档充电时间百分比
 * @property string|null $power_4_time 第4档充电时间百分比
 * @property string|null $sp_rec_mon 是否支持余额回收
 * @property string|null $sp_full_empty 是否支持断点自停
 * @property string|null $full_power_min 最大浮冲功率(单位为瓦)
 * @property string|null $full_charge_time 浮冲时间(单位为分钟)
 * @property string|null $elec_time_first 是否初始显示剩余电量
 * @property int $is_fault 是否故障
 * @property int $speed 线损
 * @property-read int|null $fault_logs_count
 */
class YDevice extends Model
{
    const SIGNAL_TIME_OUT = 'signal_time_out';
    //
    public bool $timestamps = true;
    protected ?string $table = 'y_devices';

    protected array $fillable = [
        'id', 'sn','iot_sn','channel','qr_code','station_id',
        'orders_count','active_at','expires_at','inline','port_status',
        'use_rate','is_purchase','can_refund_deposit_at','refund_deposit_at',
        'is_active','other','last_online_at','deposit','card_no',
        'signal','params_read_at','coin_min','card_min','coin_elec',
        'card_elec','cst','power_max_1','power_max_2','power_max_3',
        'power_max_4','power_2_time','power_3_time','power_4_time',
        'sp_rec_mon','sp_full_empty','full_power_min','full_charge_time',
        'elec_time_first','is_fault','only_money','charge_id',
        'distributor_id','child_distributor_id','is_refund','remark','is_disabled',
        'is_service','version'
    ];

    protected array $casts = [
        'last_online_at' => 'datetime',
        'active_at' => 'datetime',
        'expires_at' => 'datetime',
        'created_at'=>'datetime',
        'can_refund_deposit_at' => 'datetime',
        'refund_deposit_at' => 'datetime',
        'params_read_at' => 'datetime',
        'other' => 'json',
        'port_status' => 'json',
    ];

    const CHANNEL_MAX = 10;
//    const JOIN_DEPOSIT_FEE = 200;

    const RENEW_FEE = 25.00;


    public static array $otherFieldMap = [
        'n' => 'SIM卡CCID号',
        'v' => '主机软件版本',
        'm' => '主机通讯模块型号',
    ];

    /**
     * @return float
     */


    public function station() :BelongsTo{
        return $this->belongsTo(YStation::class,'station_id','id');
    }


    public function distributor() :BelongsTo{
        return $this->belongsTo(YDistributors::class,'distributor_id','id');
    }


    public function profit(){
        return $this->hasOne(YDistributorDevice::class,'device_id','id');
    }



}
